import { setupWorker } from 'msw/browser'
import { userHandlers } from './user'
import { productHandlers } from './product'

/**
 * MSW Mock 服务配置
 * @description 配置和启动 Mock Service Worker 服务
 */

// 合并所有的请求处理器
const handlers = [
  ...userHandlers,
  ...productHandlers
]

// 创建 MSW worker 实例
export const worker = setupWorker(...handlers)

/**
 * 检测是否在 Electron 环境中运行
 * @returns {boolean} 如果在 Electron 环境中返回 true
 */
const isElectron = (): boolean => {
  return typeof window !== 'undefined' && 
         (navigator.userAgent.toLowerCase().includes('electron') ||
          window.location.protocol === 'file:');
}

/**
 * 启动 Mock 服务
 * @description 在开发环境中启动 MSW 服务，针对不同环境进行优化
 */
export const startMocking = async () => {
  // 检查是否为开发环境
  const isDevelopment = import.meta.env.DEV || import.meta.env.MODE === 'development'
  
  if (isDevelopment) {
    try {
      const startOptions = {
        onUnhandledRequest: 'bypass' as const, // 对于未处理的请求，直接通过
        serviceWorker: {
          url: '/mockServiceWorker.js' // Service Worker 文件路径
        }
      }

      // 在 Electron 环境中，Service Worker 可能无法正常工作
      // 使用 fallback 模式并添加额外的配置
      if (isElectron()) {
        console.log('🔧 检测到 Electron 环境，使用 fallback 模式启动 MSW')
        await worker.start({
          ...startOptions,
          quiet: false, // 显示详细日志
        })
      } else {
        await worker.start(startOptions)
      }
      
      console.log('🚀 MSW Mock 服务已启动')
    } catch (error) {
      console.error('❌ MSW Mock 服务启动失败:', error)
      // 在 Electron 环境中，即使 Service Worker 启动失败，也可以继续运行
      if (isElectron()) {
        console.log('⚠️  在 Electron 环境中，MSW 将以 fallback 模式运行')
      }
    }
  }
}

/**
 * 停止 Mock 服务
 * @description 停止 MSW 服务
 */
export const stopMocking = () => {
  worker.stop()
  console.log('🛑 MSW Mock 服务已停止')
}

// 导出处理器供其他地方使用
export { userHandlers, productHandlers }
export default handlers